﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ControleFinanceiro.Infra.AcessoADados;
using ControleFinanceiro.Dominio.Entidades;

namespace ControleFinanceiro.WebApp.Controllers
{
  public class BancoController : Controller
  {
    //
    // GET: /Banco/

    RepositorioBanco _repositorioBanco = new RepositorioBanco();

    public ActionResult Index()
    {
      var _banco = from b in _repositorioBanco.Todos()
                   select new Models.Banco.Index
                   {
                     Id = b.Id,
                     Codigo = b.Codigo,
                     Nome = b.Nome
                   };

      return View(_banco);
    }

    //
    // GET: /Banco/Details/5

    public ActionResult Details(int id)
    {
      var _banco = from b in _repositorioBanco.Todos()
                   where b.Id == id
                   select new Models.Banco.Index
                   {
                     Id = b.Id,
                     Codigo = b.Codigo,
                     Nome = b.Nome
                   };

      return View(_banco.Single());
    }

    //
    // GET: /Banco/Create

    public ActionResult Create()
    {
      return View(new Models.Banco.Editar());
    }

    //
    // POST: /Banco/Create

    [HttpPost]
    public ActionResult Create(Models.Banco.Editar bancoEditar)
    {
      if (!ModelState.IsValid)
      {
        return View(bancoEditar);
      }
      try
      {
        var banco = new Banco(bancoEditar.Codigo, bancoEditar.Nome);
        _repositorioBanco.Salvar(banco);
      }
      catch (Exception)
      {
        return View(bancoEditar);
      }
      return RedirectToAction("Index");
    }

    //
    // GET: /Banco/Edit/5

    public ActionResult Edit(int id)
    {
      var _banco = from b in _repositorioBanco.Todos()
                   where b.Id == id
                   select new Models.Banco.Editar
                   {
                     Id = b.Id,
                     Codigo = b.Codigo,
                     Nome = b.Nome
                   };

      return View(_banco.Single());
    }

    //
    // POST: /Banco/Edit/5

    [HttpPost]
    public ActionResult Edit(Models.Banco.Editar bancoEditar)
    {
      if (!ModelState.IsValid)
      {
        return View(bancoEditar);
      }
      try
      {
        var _banco = _repositorioBanco.getBancoById(bancoEditar.Id);
        var oldBanco = _banco.Single();
        oldBanco.Codigo = bancoEditar.Codigo;
        oldBanco.Nome = bancoEditar.Nome;
        _repositorioBanco.Atualizar(oldBanco);
      }
      catch (Exception)
      {
        return View(bancoEditar);
      }
      return RedirectToAction("Index");
    }

    //
    // GET: /Banco/Delete/5

    public ActionResult Delete(int id)
    {
      var _banco = from b in _repositorioBanco.Todos()
                   where b.Id == id
                   select new Models.Banco.Index
                   {
                     Id = b.Id,
                     Codigo = b.Codigo,
                     Nome = b.Nome
                   };

      return View(_banco.Single());
    }

    //
    // POST: /Banco/Delete/5

    [HttpPost]
    public ActionResult Delete(Models.Banco.Index banco)
    {
      try
      {
        // TODO: Add delete logic here

        var _banco = _repositorioBanco.getBancoById(banco.Id);
        _repositorioBanco.Excluir(_banco.Single());


        return RedirectToAction("Index");
      }
      catch
      {
        return View();
      }
    }
  }
}
